#ifndef __p_iss__
#define __p_iss__
if(token.Matches(_("p_iss"))&&(T.GetCount()==7))
{
    IsNotExtFunc = false;

    double x = calc(T[0]);
    double y = calc(T[1]);
    double I = calc(T[2])/2;
    double O = calc(T[3])/2;
    double Ae = calc(T[4])/2;
    double R = calc(T[5]);
    double Z = calc(T[6]);

    double Dc = 0;// I[tNum].H.x/2;

    double cutRadius;
    O=O-Dc;
    I=I-Dc;

    //mChain CHAIN;
    //CHAIN.Add(mP(I+x,y,Z));

    CODE << wxString::Format(wxT("G0X%5.3fY%5.3f\n"), I+x , y );
    CODE << wxString::Format(wxT("G0Z%5.3f\n"), R );
    CODE << wxString::Format(wxT("G1Z%5.3f\n"), Z );

    while(true)
    {
         //otherpoint
        cutRadius=I;
        I=I+Ae;
        if(I>O)
        {
            I=O;
            CODE << wxString::Format(wxT("G3X%5.3fI%5.3f\n"), x-I , -(I+cutRadius)/2 );
            CODE << wxString::Format(wxT("G3X%5.3fI%5.3f\n"), x-I , I );

            break;
        }
        CODE << wxString::Format(wxT("G3X%5.3fI%5.3f\n"), x-I , -(I*2-Ae)/2 );

        //otherpoint
        cutRadius=I;
        I=I+Ae;
        if(I>O)
        {
            I=O;
            CODE << wxString::Format(wxT("G3X%5.3fI%5.3f\n"), x+I , (I+cutRadius)/2 );
            CODE << wxString::Format(wxT("G3X%5.3fI%5.3f\n"), x+I , -I );
            break;
        }
        CODE << wxString::Format(wxT("G3X%5.3fI%5.3f\n"), x+I , (I*2-Ae)/2 );
    }

    CODE << wxString::Format(wxT("G0Z%5.3f\n"), R );
    continue;
}
#else
INFO << _("p_iss(x,y,i,o,Ae,r,z)<BR>");
if(token.Matches(_("p_iss(*")))
{
    INFO = _("<b>p_iss</b>(x,y,i,o,Ae,r,z)<BR>");
    INFO << _("(inner spiral surface)<BR>");
    INFO << _("x,y = circle center<BR>");
    INFO << _("i,o = inner/outer diameter<BR>");
    INFO << _("r,z = safe/cut altitude<BR>");
    return true;
}
#endif
